package com.wbt.design.patterns.obverser.test02;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: spring
 * @description: 抽象主题（Subject）角色：也叫抽象目标类，它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法，以及通知所有观察者的抽象方法。
 * @author: Wang·Baotong
 * @create: 2021-07-05 14:43
 */
public abstract  class Subject {

    protected List<Observer> observers = new ArrayList<Observer>();

    private int state;

    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;
        //notifyObserver();
    }

    //增加观察者方法 注册添加观察者（申请订阅）
    public void add(Observer observer) {
        observers.add(observer);
    }
    //删除观察者方法  删除观察者（取消订阅）
    public void remove(Observer observer) {
        observers.remove(observer);
    }
    //通知观察者方法 主题状态发生变化时通知所有的观察者对象
    public abstract void notifyObserver();
}
